package internal
//
//import (
//	"game-server/log"
//	"sort"
//	"strconv"
//	"strings"
//)
//
//type specialPoker struct {
//	sPoker  []string
//	special int
//}
//
//func mPoker(pks []string) ([]string, []int32) {
//	pokerInfo := []string{}
//	types := []int32{1, 1, 1}
//
//	// 获取鬼牌数量
//	sPokerInfo := &specialPoker{}
//
//	str := strings.Join(pks, ",")
//	sPokers := append([]string{}, pks...)
//	if strings.Count(str, bigJoker) == 1 {
//		sPokerInfo.special++
//		for k, v := range pks {
//			if v == bigJoker {
//				pks = append(pks[:k], pks[k+1:]...)
//				sPokerInfo.sPoker = append(sPokerInfo.sPoker, bigJoker)
//			}
//		}
//	}
//	if strings.Count(str, smallJoker) == 1 {
//		sPokerInfo.special++
//		for k, v := range pks {
//			if v == smallJoker {
//				pks = append(pks[:k], pks[k+1:]...)
//				sPokerInfo.sPoker = append(sPokerInfo.sPoker, smallJoker)
//			}
//		}
//	}
//
//	log.Info(" pks = ", pks, sPokerInfo)
//
//	bbb, ccc := mFlushDragon(sPokerInfo, pks)
//	log.Info(" mFlushDragon = ", bbb, ccc, sPokerInfo)
//	if bbb {
//		if ccc {
//			types = append([]int32{}, CT_THIRTEEN_FLUSH)
//		} else {
//			types = append([]int32{}, CT_THIRTEEN)
//		}
//	}
//
//	if types[0] == 1 {
//		bbb := mThreeFlushStraight(sPokerInfo, pks)
//		log.Info(" mThreeFlushStraight = ", bbb, sPokerInfo)
//		if bbb {
//			types = append([]int32{}, CT_THREE_STRAIGHTFLUSH)
//		}
//	}
//
//	if types[0] == 1 {
//		bbb := mThreeFour(sPokerInfo, pks)
//		log.Info(" mThreeFour = ", bbb, sPokerInfo)
//		if bbb {
//			types = append([]int32{}, CT_THREE_BOMB)
//		}
//	}
//
//	if types[0] == 1 {
//		bbb := mFourThree(sPokerInfo, pks)
//		log.Info(" mFourThree = ", bbb, sPokerInfo)
//		if bbb {
//			types = append([]int32{}, CT_FOUR_THREESAME)
//		}
//	}
//
//	tNum := []int32{}
//
//	if types[0] == 1 {
//		bbb, ccc := mThreeFlush(sPokerInfo, pks)
//		log.Info(" mThreeFlush = ", bbb, ccc, sPokerInfo)
//		if bbb {
//			if ccc {
//				//types = append([]int32{}, CT_THREE_FLUSH_STRAIGHT)
//				//tNum = CT_THREE_FLUSH_STRAIGHT
//				tNum = append(tNum, CT_THREE_FLUSH_STRAIGHT)
//			} else {
//				//types = append([]int32{}, CT_THREE_FLUSH)
//				//tNum = CT_THREE_FLUSH
//				tNum = append(tNum, CT_THREE_FLUSH)
//			}
//		}
//	}
//
//	if types[0] == 1 {
//		bbb, ccc := mThreeStraight(sPokerInfo, pks)
//		log.Info(" mThreeStraight = ", bbb, ccc, sPokerInfo)
//		if bbb {
//			if ccc {
//				//types = append([]int32{}, CT_THREE_STRAIGHT_FLUSH)
//				//tNum = CT_THREE_STRAIGHT_FLUSH
//				tNum = append(tNum, CT_THREE_STRAIGHT_FLUSH)
//			} else {
//				//types = append([]int32{}, CT_THREE_STRAIGHT)
//				//tNum = CT_THREE_STRAIGHT
//				tNum = append(tNum, CT_THREE_STRAIGHT)
//			}
//		}
//	}
//
//	if types[0] == 1 {
//		bbb, ccc := mSixDouble(sPokerInfo, pks)
//		log.Info(" mSixDouble = ", bbb, ccc, sPokerInfo)
//		if bbb {
//			if ccc {
//				//types = append([]int32{}, CT_SIXPAIR_SPECIAL)
//				//tNum = CT_SIXPAIR_SPECIAL
//				tNum = append(tNum, CT_SIXPAIR_SPECIAL)
//			} else {
//				//types = append([]int32{}, CT_SIXPAIR)
//				//tNum = CT_SIXPAIR
//				tNum = append(tNum, CT_SIXPAIR)
//			}
//		}
//	}
//
//	log.Info(" tNum = ", tNum)
//	if len(tNum) > 0 {
//		for _, v := range tNum {
//			if v%2 == 1 {
//				types = append([]int32{}, v)
//				break
//			}
//		}
//		if len(types) > 1 {
//			types = append([]int32{}, tNum[0])
//		}
//	}
//
//	if types[0] == 1 {
//		t := 0
//		p := []string{}
//		ppp := append([]string{}, pks...)
//		log.Info(" pks = ", pks, ppp)
//		for i := 0; i < 3; i++ {
//			log.Info(" sPokerInfo = ", ppp, sPokerInfo)
//			if i < 2 {
//				p, ppp = mFiveSame(sPokerInfo, ppp)
//				log.Info(" mFiveSame = ", p, ppp, sPokerInfo)
//				if len(p) > 0 {
//					pokerInfo = append(p, pokerInfo...)
//					types[2-i] = CT_FIVE_SAME
//					continue
//				}
//
//				p, ppp, t = mFlushStraight(sPokerInfo, ppp)
//				log.Info(" mFlushStraight = ", p, ppp, t, sPokerInfo)
//				if len(p) > 0 {
//					pokerInfo = append(p, pokerInfo...)
//					if t == 3 {
//						types[2-i] = CT_FIVE_STRAIGHT_FLUSH_BACK_A
//					}
//					if t == 2 {
//						types[2-i] = CT_FIVE_STRAIGHT_FLUSH_FIRST_A
//					}
//					if t == 1 {
//						types[2-i] = CT_FIVE_STRAIGHT_FLUSH_NO_A
//					}
//					continue
//				}
//
//				p, ppp = mFour(sPokerInfo, ppp)
//				log.Info(" mFour = ", p, ppp, sPokerInfo)
//				if len(p) > 0 {
//					pokerInfo = append(p, pokerInfo...)
//					types[2-i] = CT_FIVE_FOUR_ONE
//					continue
//				}
//
//				p, ppp = mGourd(sPokerInfo, ppp)
//				log.Info(" mGourd = ", p, ppp, sPokerInfo)
//				if len(p) > 0 {
//					pokerInfo = append(p, pokerInfo...)
//					if i == 1 {
//						types[2-i] = CT_THREE_DEOUBLE_MIDDLE
//					} else {
//						types[2-i] = CT_FIVE_THREE_DEOUBLE
//					}
//					continue
//				}
//
//				p, ppp = mFlush(sPokerInfo, ppp)
//				log.Info(" mFlush = ", p, ppp, sPokerInfo)
//				if len(p) > 0 {
//					pokerInfo = append(p, pokerInfo...)
//					types[2-i] = CT_FIVE_FLUSH_FIRST_A
//					continue
//				}
//
//				p, ppp, t = mStraight(sPokerInfo, ppp)
//				log.Info(" mStraight = ", p, ppp, t, sPokerInfo)
//				if len(p) > 0 {
//					pokerInfo = append(p, pokerInfo...)
//					if t == 3 {
//						types[2-i] = CT_FIVE_MIXED_FLUSH_BACK_A
//					}
//					if t == 2 {
//						types[2-i] = CT_FIVE_MIXED_FLUSH_FIRST_A
//					}
//					if t == 1 {
//						types[2-i] = CT_FIVE_MIXED_FLUSH_NO_A
//					}
//					continue
//				}
//			}
//
//			log.Info(" ppp = ", ppp)
//			p, ppp = mThree(sPokerInfo, ppp)
//			log.Info(" mThree = ", p, ppp, sPokerInfo)
//			if len(p) > 0 {
//				pokerInfo = append(p, pokerInfo...)
//				if i != 2 {
//					types[2-i] = CT_THREE
//				} else {
//					types[2-i] = CT_THREE_TOUDUN
//				}
//				continue
//			}
//
//			p, ppp = mTwice(sPokerInfo, ppp)
//			log.Info(" mTwice = ", p, ppp, sPokerInfo)
//			if len(p) > 0 {
//				pokerInfo = append(p, pokerInfo...)
//				types[2-i] = CT_FIVE_TWO_DOUBLE
//				continue
//			}
//
//			p, ppp = mTwo(sPokerInfo, ppp)
//			log.Info(" mTwo = ", p, ppp, sPokerInfo)
//			if len(p) > 0 {
//				pokerInfo = append(p, pokerInfo...)
//				types[2-i] = CT_ONE_DOUBLE
//				continue
//			}
//
//			sort.Sort(sort.Reverse(sort.StringSlice(ppp)))
//			if i < 2 {
//				log.Info(" info = ", ppp, ppp[:5], ppp[5:])
//				p = append([]string{}, ppp[:5]...)
//				pokerInfo = append(p, pokerInfo...)
//				ppp = append([]string{}, ppp[5:]...)
//				log.Info(" ppp3 = ", ppp, pokerInfo)
//			} else {
//				log.Info(" info = ", ppp)
//				pokerInfo = append(ppp, pokerInfo...)
//			}
//			types[2-i] = CT_SINGLE
//		}
//
//	}
//	log.Info(" pokerInfo = ", pokerInfo, types)
//	log.Info(" pks = ", pks, sPokers)
//	if len(pokerInfo) == 0 {
//		pokerInfo = sPokers
//	}
//
//	return pokerInfo, types
//}
//
///**
// ** param pp:手牌 a:是否替换牌号 b:正序，倒序
// */
//func mSort(pp []string, a, b bool) []string {
//	// 去除牌色标记
//	var poker []string
//	for i := 0; i < len(pp); i++ {
//		str := strings.Join(poker, ",")
//		if strings.Count(str, pp[i][1:]) == 0 {
//			poker = append(poker, pp[i][1:])
//		}
//	}
//	//poker := pp
//	if a {
//		// 修改扑克牌A编码01为14
//		ssUser := strings.Join(poker, ",")
//		ssUser = strings.Replace(ssUser, "01", "14", 5)
//		poker = strings.Split(ssUser, ",")
//	}
//
//	// 排序
//	if b {
//		sort.Sort(sort.Reverse(sort.StringSlice(poker)))
//	} else {
//		sort.Strings(poker)
//	}
//	return poker
//}
//
//// 至尊青龙/一条龙牌型判断
//func mFlushDragon(sp *specialPoker, poker []string) (bool, bool) {
//	p := []string{}
//	for _, v := range poker {
//		str := strings.Join(p, ",")
//		if strings.Count(str, v[1:]) == 0 {
//			p = append(p, v[1:])
//		}
//	}
//
//	if (len(p) + sp.special) == 13 {
//		sp := []string{}
//		for _, v := range poker {
//			str := strings.Join(sp, ",")
//			if strings.Count(str, v[:1]) == 0 {
//				sp = append(sp, v[:1])
//			}
//		}
//		log.Info(" sp = ", sp)
//
//		if len(sp) == 1 {
//			return true, true
//		} else {
//			return true, false
//		}
//	} else {
//		return false, false
//	}
//}
//
//// 三同花顺牌型判断
//func mThreeFlushStraight(sp *specialPoker, poker []string) bool {
//	mType := 0
//	ct := 0
//	p := []string{}
//	pokerA := append([]string{}, poker...)
//	for _, v := range poker {
//		str := strings.Join(p, ",")
//		if strings.Count(str, v[:1]) == 0 {
//			p = append(p, v[:1])
//		}
//	}
//	sort.Strings(p)
//	log.Info(" poker = ", p)
//
//	// 鬼牌模式
//	if len(p) <= 3 {
//		log.Info(" poker = ", len(p))
//		lStr := []string{"03", "05", "05", "06", "07", "08", "09", "10", "13"}
//		jNum := 0
//		for i := 0; i <= (sp.special - jNum); i++ {
//			log.Info(" poker = ", i, jNum, sp.special-jNum)
//			for j := ct; j < len(p); j++ {
//				v := p[j]
//				bBool := false
//				reStr := []string{}
//				for _, val := range pokerA {
//					if val[:1] == v {
//						reStr = append(reStr, val)
//					}
//				}
//				reStrP := mSort(reStr, false, false)
//				eBool := true
//				for eBool {
//					log.Info(" poker = ", reStr, reStrP, sp, i, jNum)
//					rl := len(reStr) + i
//					if len(reStr) > 5 {
//						rl = len(reStrP) + i
//					}
//					sts := strconv.Itoa(rl)
//					if rl < 10 {
//						sts = "0" + strconv.Itoa(rl)
//						log.Info(" sts = ", sts)
//					}
//
//					log.Info(" Count = ", lStr, strconv.Itoa(rl), strings.Count(strings.Join(lStr, ","), sts), sts)
//					if strings.Count(strings.Join(lStr, ","), sts) == 0 {
//						bBool = true
//						break
//					}
//
//					log.Info(" poker = ", reStr, lStr)
//					pokerS := mSort(reStr, true, true)
//					log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//					l := len(pokerS)
//
//					log.Info(" poker111 = ", pokerS, l, i)
//
//					slStr := []string{}
//
//					jBool := true
//					aCt := 0
//					for _, v := range pokerS {
//						if v >= "10" {
//							aCt++
//						}
//					}
//					log.Info(" poker = ", aCt, i)
//					if (aCt + i) == 5 {
//						if pokerS[0] == "14" {
//							jBool = false
//							slStr = append(slStr, "01")
//							slStr = append(slStr, pokerS[1:aCt]...)
//						}
//						if pokerS[0] != "14" && i > 0 {
//							jBool = false
//							slStr = append(slStr, pokerS[:aCt]...)
//						}
//					} else {
//						ctA := 0
//						for _, v := range pokerS {
//							if v <= "05" {
//								ctA++
//							}
//						}
//						log.Info(" poker = ", ctA, i)
//						if pokerS[0] == "14" {
//							if (ctA + i) == 4 {
//								l := len(pokerS)
//								jBool = false
//								slStr = append(slStr, "01")
//								slStr = append(slStr, pokerS[l-ctA:l]...)
//							}
//						}
//						if pokerS[0] != "14" {
//							if (ctA + i) == 5 {
//								l := len(pokerS)
//								jBool = false
//								slStr = append(slStr, pokerS[l-ctA:l]...)
//							}
//						}
//					}
//
//					log.Info(" jBool = ", jBool, slStr)
//					if jBool {
//						if l >= 5 {
//							for j := 0; j < (l - 4 + i); j++ {
//								iVal, _ := strconv.Atoi(pokerS[j])
//								iVal4, _ := strconv.Atoi(pokerS[j+4-i])
//								log.Info(" poker = ", iVal, iVal4, i)
//								if (iVal-iVal4) == 4 && i == 0 {
//									slStr = append(slStr, pokerS[j:j+5-i]...)
//									break
//								}
//								if (iVal-iVal4+i) == 5 && i != 0 {
//									slStr = append(slStr, pokerS[j:j+5-i]...)
//									break
//								}
//								if (iVal-iVal4+i) == 5-i && i != 0 {
//									slStr = append(slStr, pokerS[j:j+5-i]...)
//									break
//								}
//							}
//						} else {
//							log.Info(" pokerS = ", pokerS)
//							iVal, _ := strconv.Atoi(pokerS[0])
//							iVal4 := 0
//							if l > 1 {
//								iVal4, _ = strconv.Atoi(pokerS[l-1])
//							} else {
//								iVal4 = iVal - 2
//							}
//							log.Info(" poker111 = ", iVal, iVal4, l, i)
//							if l+i == 5 {
//								if iVal-iVal4+i == 4 {
//									slStr = append(slStr, pokerS[:l]...)
//								}
//								if iVal-iVal4 == 4 && len(pokerS)+i == 5 {
//									slStr = append(slStr, pokerS[:l]...)
//								}
//							}
//							if l+i == 3 {
//								if iVal-iVal4 == 2 {
//									slStr = append(slStr, pokerS[:l]...)
//								}
//								if iVal-iVal4+i == 2 && i != 0 {
//									slStr = append(slStr, pokerS[:l]...)
//								}
//							}
//						}
//					}
//
//					if len(slStr) > 0 {
//						jNum += i
//						i -= i
//						mType++
//
//						for key, val := range lStr {
//							if val == sts {
//								lStr = append(lStr[:key], lStr[key+1:]...)
//								break
//							}
//						}
//
//						log.Info(" poker222 = ", pokerS, reStr, slStr)
//						for _, lv := range slStr {
//							for sk, sv := range reStr {
//								if sv[1:] == lv {
//									reStr = append(reStr[:sk], reStr[sk+1:]...)
//									break
//								}
//							}
//						}
//						for _, lv := range slStr {
//							for sk, sv := range pokerA {
//								if sv[1:] == lv {
//									pokerA = append(pokerA[:sk], pokerA[sk+1:]...)
//									break
//								}
//							}
//						}
//						log.Info(" poker333 = ", pokerS, reStr, pokerA)
//
//						if len(reStr) > 0 {
//							reStrP = mSort(reStr, false, false)
//							log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//							l = len(pokerS)
//						} else {
//							ct++
//							log.Info(" poker = ", mType, i)
//							eBool = false
//						}
//					} else {
//						eBool = false
//						bBool = true
//					}
//				}
//
//				if bBool {
//					break
//				}
//			}
//		}
//	}
//
//	if mType == 3 {
//		return true
//	}
//	return false
//}
//
//// 三分天下牌型判断
//func mThreeFour(sp *specialPoker, poker []string) bool {
//	one := 0
//	single := 0
//	double := 0
//	three := 0
//	p := mSort(poker, false, false)
//	log.Info(" poker = ", poker, p)
//
//	reStr := []string{}
//	for _, val := range poker {
//		reStr = append(reStr, val[1:])
//	}
//	str := strings.Join(reStr, ",")
//	log.Info(" poker = ", reStr)
//
//	if len(p) == 4 || len(p) == 3 {
//		for _, v := range p {
//			ct := strings.Count(str, v)
//
//			if ct%4 == 3 {
//				three++
//			}
//
//			if ct%4 == 2 {
//				double++
//			}
//
//			if ct%4 == 1 {
//				single++
//			}
//
//			if ct%4 == 0 {
//				one++
//			}
//		}
//
//		log.Info(" ct = ", one, single, double, three)
//		if sp.special == 1 {
//			if double == 0 && ((three == 1 && single == 1) || (three == 0 && single == 0)) {
//				return true
//			}
//		}
//
//		if sp.special == 2 {
//			if double == 1 && three == 0 && single == 1 {
//				return true
//			}
//			if double == 0 && ((three == 2 && single == 1) || (three == 1 && single == 0)) {
//				return true
//			}
//		}
//
//		if sp.special == 0 {
//			if single == 1 && double == 0 && three == 0 {
//				return true
//			}
//		}
//	}
//
//	return false
//}
//
//// 四套三条牌型判断
//func mFourThree(sp *specialPoker, poker []string) bool {
//	one := 0
//	single := 0
//	double := 0
//	p := mSort(poker, false, false)
//	log.Info(" poker = ", p)
//
//	reStr := []string{}
//	for _, val := range poker {
//		reStr = append(reStr, val[1:])
//	}
//	str := strings.Join(reStr, ",")
//	log.Info(" poker = ", reStr)
//
//	if len(p) == 4 || len(p) == 5 {
//		for _, v := range p {
//			ct := strings.Count(str, v)
//
//			if ct%3 == 2 {
//				double++
//			}
//
//			if ct%3 == 1 {
//				single++
//			}
//
//			if ct%3 == 0 {
//				one++
//			}
//		}
//
//		log.Info(" ct = ", one, single, double)
//		if sp.special == 1 {
//			if double == 1 && (single == 1 || single == 0) || (double == 0 && single == 0) {
//				return true
//			}
//		}
//
//		if sp.special == 2 {
//			if double == 1 && (single == 1 || single == 0) {
//				return true
//			}
//			if double == 2 && single == 1 {
//				return true
//			}
//			if double == 0 && single == 2 {
//				return true
//			}
//		}
//
//		if sp.special == 0 {
//			if single == 1 && double == 0 {
//				return true
//			}
//		}
//	}
//
//	return false
//}
//
//// 三同花牌型判断
//func mThreeFlush(sp *specialPoker, poker []string) (bool, bool) {
//	mType := 0
//	p := []string{}
//	straight := false
//	for _, v := range poker {
//		str := strings.Join(p, ",")
//		if strings.Count(str, v[:1]) == 0 {
//			p = append(p, v[:1])
//		}
//	}
//	sort.Strings(p)
//	log.Info(" poker = ", p)
//
//	// 鬼牌模式
//	if len(p) <= 3 {
//		spNum := 0
//		lArr := []string{}
//		ssp := append([]string{}, p...)
//		pokerA := append([]string{}, poker...)
//		pokerB := append([]string{}, poker...)
//		for i := 0; i < len(ssp); i++ {
//			reStr := []string{}
//			for _, val := range poker {
//				if val[:1] == ssp[i] {
//					reStr = append(reStr, val)
//				}
//			}
//			if len(reStr) == 3 {
//				spNum++
//				lArr = append(lArr, ssp[i])
//				ssp = append(ssp[:i], ssp[i+1:]...)
//				i--
//			}
//		}
//		if len(lArr) > 0 {
//			lArr = append(lArr, ssp...)
//		}
//
//		log.Info(" poker = ", spNum, lArr, p, len(p), sp)
//		lStr := []string{"03", "05", "05", "06", "07", "08", "09", "10", "13"}
//		slStr := []string{"03", "05", "05", "06", "07", "08", "09", "10", "13"}
//		ctStr := "3,5,8"
//		jNum := 0
//		ct := 0
//		for i := 0; i <= (sp.special - jNum); i++ {
//			log.Info(" poker = ", i, ct, spNum, mType, lArr, p, len(p), sp)
//			for j := ct; j < len(p); j++ {
//				v := p[j]
//				bBool := false
//				reStr := []string{}
//				for _, val := range pokerA {
//					if val[:1] == v {
//						reStr = append(reStr, val)
//					}
//				}
//				reStrP := mSort(reStr, false, false)
//				jBool := true
//				for jBool {
//					log.Info(" poker = ", reStr, reStrP, i, j, ct, mType)
//					rl := len(reStr) + i
//					if len(reStr) > 5 {
//						rl = len(reStrP) + i
//					}
//					sts := strconv.Itoa(rl)
//					if rl < 10 {
//						sts = "0" + strconv.Itoa(rl)
//						log.Info(" sts = ", sts)
//					}
//
//					log.Info(" Count = ", lStr, strconv.Itoa(rl), strings.Count(strings.Join(lStr, ","), sts), sts)
//					if strings.Count(strings.Join(lStr, ","), sts) == 0 {
//						bBool = true
//						break
//					}
//
//					for key, val := range lStr {
//						if val == sts {
//							lStr = append(lStr[:key], lStr[key+1:]...)
//							break
//						}
//					}
//
//					mType++
//
//					log.Info(" poker = ", reStr, mType, lStr)
//					pokerS := mSort(reStr, true, true)
//					log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//					l := len(pokerS)
//
//					if l+i >= 5 || len(reStr)+i == 5 {
//						slStr := []string{}
//						eBool := true
//						aCt := 0
//						for _, v := range pokerS {
//							if v >= "10" {
//								aCt++
//							}
//						}
//						log.Info(" poker = ", aCt, i)
//						if (aCt + i) == 5 {
//							if pokerS[0] == "14" {
//								eBool = false
//								straight = true
//								slStr = append(slStr, "01")
//								slStr = append(slStr, pokerS[1:aCt]...)
//							}
//							if pokerS[0] != "14" && i > 0 {
//								eBool = false
//								straight = true
//								slStr = append(slStr, pokerS[:aCt]...)
//							}
//						} else {
//							ctA := 0
//							for _, v := range pokerS {
//								if v <= "05" {
//									ctA++
//								}
//							}
//							log.Info(" poker = ", ctA, i)
//							if pokerS[0] == "14" {
//								if (ctA + i) == 4 {
//									eBool = false
//									straight = true
//									slStr = append(slStr, "01")
//									slStr = append(slStr, pokerS[l-ctA:l]...)
//								}
//							}
//							if pokerS[0] != "14" {
//								if (ctA + i) == 5 {
//									eBool = false
//									straight = true
//									slStr = append(slStr, pokerS[l-ctA:l]...)
//								}
//							}
//						}
//
//						log.Info(" eBool = ", eBool)
//						if eBool {
//							if l >= 5 {
//								for j := 0; j < (l - 4 + i); j++ {
//									iVal, _ := strconv.Atoi(pokerS[j])
//									iVal4, _ := strconv.Atoi(pokerS[j+4-i])
//									log.Info(" poker = ", iVal, iVal4, i)
//									if (iVal-iVal4) == 4 && i == 0 {
//										straight = true
//										slStr = append(slStr, pokerS[j:j+5-i]...)
//										break
//									}
//									if (iVal-iVal4+i) == 5 && i != 0 {
//										straight = true
//										slStr = append(slStr, pokerS[j:j+5-i]...)
//										break
//									}
//									if (iVal-iVal4+i) == 5-i && i != 0 {
//										straight = true
//										slStr = append(slStr, pokerS[j:j+5-i]...)
//										break
//									}
//								}
//							} else {
//								log.Info(" pokerS = ", pokerS)
//								if l+i == 5 {
//									iVal, _ := strconv.Atoi(pokerS[0])
//									iVal4, _ := strconv.Atoi(pokerS[l-1])
//									if iVal-iVal4+i == 4 && i != 0 {
//										straight = true
//										slStr = append(slStr, pokerS[:l]...)
//									}
//									log.Info(" slStr = ", slStr)
//									if iVal-iVal4+i == 5 {
//										straight = true
//										slStr = append(slStr, pokerS[:l]...)
//									}
//									log.Info(" slStr = ", slStr)
//								}
//							}
//						}
//
//						if len(slStr) > 0 {
//							log.Info(" poker222 = ", pokerS, reStr, slStr)
//							for _, lv := range slStr {
//								for sk, sv := range reStr {
//									if sv[1:] == lv {
//										reStr = append(reStr[:sk], reStr[sk+1:]...)
//										break
//									}
//								}
//							}
//							for _, lv := range slStr {
//								for sk, sv := range pokerA {
//									if sv[1:] == lv && sv[:1] == v {
//										pokerA = append(pokerA[:sk], pokerA[sk+1:]...)
//										break
//									}
//								}
//							}
//							log.Info(" poker333 = ", pokerS, reStr, pokerA)
//
//							if len(reStr) > 0 {
//								reStrP = mSort(reStr, false, false)
//								log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//								l = len(pokerS)
//							} else {
//								ct++
//								log.Info(" poker = ", mType, i)
//								jBool = false
//							}
//						} else {
//							lll := len(reStr) + i
//							if lll > 5 {
//								if sp.special > 0 && i == 0 {
//									jBool = false
//									bBool = true
//									mType--
//								} else {
//									for _, lv := range reStr[:5] {
//										for sk, sv := range pokerA {
//											if sv == lv {
//												pokerA = append(pokerA[:sk], pokerA[sk+1:]...)
//												break
//											}
//										}
//									}
//									reStr = append([]string{}, reStr[5:]...)
//									log.Info(" reStr = ", len(reStr), reStr, pokerA)
//									if len(reStr) > 0 {
//										reStrP = mSort(reStr, false, false)
//									}
//									if strings.Count(ctStr, strconv.Itoa(len(reStr)+sp.special-jNum)) == 0 {
//										mType--
//									}
//									log.Info(" reStr = ", len(reStr), reStr, mType)
//								}
//							} else {
//								ct++
//								jBool = false
//							}
//						}
//					}
//
//					if i+l == 3 {
//						jBool = false
//						ct++
//					}
//
//					if i > 0 {
//						jNum += i
//						i -= i
//					}
//				}
//
//				if bBool {
//					break
//				}
//
//				log.Info(" straight = ", straight)
//				if mType == 3 && spNum == 2 && !straight {
//					mType = 0
//					jNum = 0
//					i = -1
//					spNum = 0
//					ct = 0
//					lArr[0], lArr[1] = lArr[1], lArr[0]
//					pokerA = append([]string{}, poker...)
//					lStr = append([]string{}, slStr...)
//					p = append([]string{}, lArr...)
//					break
//				}
//			}
//		}
//
//		log.Info(" mType = ", mType)
//		if mType != 3 {
//			lStr = []string{"03", "05", "05", "06", "07", "08", "09", "10", "13"}
//			slStr = []string{"03", "05", "05", "06", "07", "08", "09", "10", "13"}
//			ctStr = "3,5,8"
//			straight = false
//			jNum = 0
//			ct = 0
//			mType = 0
//			for i := 0; i <= (sp.special - jNum); i++ {
//				log.Info(" poker = ", i, ct, spNum, mType, lArr, p, len(p), sp)
//				for j := ct; j < len(p); j++ {
//					v := p[j]
//					bBool := false
//					reStr := []string{}
//					for _, val := range pokerB {
//						if val[:1] == v {
//							reStr = append(reStr, val)
//						}
//					}
//					reStrP := mSort(reStr, false, false)
//					jBool := true
//					for jBool {
//						log.Info(" poker = ", reStr, reStrP, i, j, ct, mType)
//						rl := len(reStr) + i
//						if len(reStr) > 5 {
//							rl = len(reStrP) + i
//						}
//						sts := strconv.Itoa(rl)
//						if rl < 10 {
//							sts = "0" + strconv.Itoa(rl)
//							log.Info(" sts = ", sts)
//						}
//
//						log.Info(" Count = ", lStr, strconv.Itoa(rl), strings.Count(strings.Join(lStr, ","), sts), sts)
//						if strings.Count(strings.Join(lStr, ","), sts) == 0 {
//							bBool = true
//							break
//						}
//
//						for key, val := range lStr {
//							if val == sts {
//								lStr = append(lStr[:key], lStr[key+1:]...)
//								break
//							}
//						}
//
//						mType++
//
//						log.Info(" poker = ", reStr, mType, lStr)
//						pokerS := mSort(reStr, false, false)
//						log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//						l := len(pokerS)
//
//						if l+i >= 5 || len(reStr)+i == 5 {
//							slStr := []string{}
//							eBool := true
//							aCt := 0
//							for _, v := range pokerS {
//								if v <= "05" {
//									aCt++
//								}
//							}
//							log.Info(" poker = ", aCt, i)
//							if (aCt + i) == 5 {
//								eBool = false
//								straight = true
//								slStr = append(slStr, pokerS[:aCt]...)
//							} else {
//								ctA := 0
//								for _, v := range pokerS {
//									if v >= "10" {
//										ctA++
//									}
//								}
//								log.Info(" poker = ", ctA, i)
//								if pokerS[0] == "01" {
//									if (ctA + i) == 4 {
//										eBool = false
//										straight = true
//										slStr = append(slStr, "01")
//										slStr = append(slStr, pokerS[l-ctA:l]...)
//									}
//								}
//								if pokerS[0] != "01" {
//									if (ctA + i) == 5 {
//										eBool = false
//										straight = true
//										slStr = append(slStr, pokerS[l-ctA:l]...)
//									}
//								}
//							}
//
//							log.Info(" eBool = ", eBool)
//							if eBool {
//								if l >= 5 {
//									for j := 0; j < (l - 4 + i); j++ {
//										iVal, _ := strconv.Atoi(pokerS[j])
//										iVal4, _ := strconv.Atoi(pokerS[j+4-i])
//										log.Info(" poker = ", iVal, iVal4, i)
//										if (iVal4-iVal) == 4 && i == 0 {
//											straight = true
//											slStr = append(slStr, pokerS[j:j+5-i]...)
//											break
//										}
//										if (iVal4-iVal+i) == 5 && i != 0 {
//											straight = true
//											slStr = append(slStr, pokerS[j:j+5-i]...)
//											break
//										}
//										if (iVal4-iVal+i) == 5-i && i != 0 {
//											straight = true
//											slStr = append(slStr, pokerS[j:j+5-i]...)
//											break
//										}
//									}
//								} else {
//									log.Info(" pokerS = ", pokerS)
//									if l+i == 5 {
//										iVal, _ := strconv.Atoi(pokerS[0])
//										iVal4, _ := strconv.Atoi(pokerS[l-1])
//										if iVal4-iVal+i == 4 && i != 0 {
//											straight = true
//											slStr = append(slStr, pokerS[:l]...)
//										}
//										log.Info(" slStr = ", slStr)
//										if iVal4-iVal+i == 5 {
//											straight = true
//											slStr = append(slStr, pokerS[:l]...)
//										}
//										log.Info(" slStr = ", slStr)
//									}
//								}
//							}
//
//							if len(slStr) > 0 {
//								log.Info(" poker222 = ", pokerS, reStr, slStr)
//								for _, lv := range slStr {
//									for sk, sv := range reStr {
//										if sv[1:] == lv {
//											reStr = append(reStr[:sk], reStr[sk+1:]...)
//											break
//										}
//									}
//								}
//								for _, lv := range slStr {
//									for sk, sv := range pokerB {
//										if sv[1:] == lv && sv[:1] == v {
//											pokerB = append(pokerB[:sk], pokerB[sk+1:]...)
//											break
//										}
//									}
//								}
//								log.Info(" poker333 = ", pokerS, reStr, pokerB)
//
//								if len(reStr) > 0 {
//									reStrP = mSort(reStr, false, false)
//									log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//									l = len(pokerS)
//								} else {
//									ct++
//									log.Info(" poker = ", mType, i)
//									jBool = false
//								}
//							} else {
//								lll := len(reStr) + i
//								if lll > 5 {
//									if sp.special > 0 && i == 0 {
//										jBool = false
//										bBool = true
//										mType--
//									} else {
//										for _, lv := range reStr[:5] {
//											for sk, sv := range pokerB {
//												if sv == lv {
//													pokerB = append(pokerB[:sk], pokerB[sk+1:]...)
//													break
//												}
//											}
//										}
//										reStr = append([]string{}, reStr[5:]...)
//										log.Info(" reStr = ", len(reStr), reStr, pokerB)
//										if len(reStr) > 0 {
//											reStrP = mSort(reStr, false, false)
//										}
//										if strings.Count(ctStr, strconv.Itoa(len(reStr)+sp.special-jNum)) == 0 {
//											mType--
//										}
//										log.Info(" reStr = ", len(reStr), reStr, mType)
//									}
//								} else {
//									ct++
//									jBool = false
//								}
//							}
//						}
//
//						if i+l == 3 {
//							jBool = false
//							ct++
//						}
//
//						if i > 0 {
//							jNum += i
//							i -= i
//						}
//					}
//
//					if bBool {
//						break
//					}
//
//					log.Info(" straight = ", straight)
//					if mType == 3 && spNum == 2 && !straight {
//						mType = 0
//						jNum = 0
//						i = -1
//						spNum = 0
//						ct = 0
//						lArr[0], lArr[1] = lArr[1], lArr[0]
//						pokerA = append([]string{}, poker...)
//						lStr = append([]string{}, slStr...)
//						p = append([]string{}, lArr...)
//						break
//					}
//				}
//			}
//		}
//	}
//
//	if mType == 3 {
//		return true, straight
//	}
//	return false, false
//}
//
//// 三顺子牌型判断
//func mThreeStraight(sp *specialPoker, poker []string) (bool, bool) {
//	flush := false
//	p := []string{}
//	for _, v := range poker {
//		str := strings.Join(p, ",")
//		if strings.Count(str, v[:1]) == 0 {
//			p = append(p, v[:1])
//		}
//	}
//	sort.Strings(p)
//	log.Info(" poker = ", p)
//
//	spCt := sp.special
//	spPoker := sp.sPoker
//	// 鬼牌模式
//	log.Info(" poker = ", len(p))
//	preArr := [][]string{}
//	fArr := [][]string{}
//	mType := []int{}
//	pokerE := append([]string{}, poker...)
//	lStr := []string{"5", "5", "6", "8", "10", "13"}
//	for i := 0; i <= sp.special; i++ {
//		log.Info(" mType = ", i, mType)
//		for j := 0; j < len(p); j++ {
//			pBool := false
//			for _, v := range mType {
//				if v == j {
//					pBool = true
//					break
//				}
//			}
//			if pBool {
//				continue
//			}
//			reStrC := []string{}
//			reStrP := []string{}
//			v := p[j]
//			for _, val := range pokerE {
//				if val[:1] == v {
//					reStrP = append(reStrP, val)
//				}
//			}
//			reStrS := mSort(reStrP, false, false)
//			log.Info(" poker = ", reStrP, reStrS, i, mType, j)
//			rl := len(reStrS) + i
//
//			log.Info(" Count = ", strconv.Itoa(rl), strings.Count(strings.Join(lStr, ","), strconv.Itoa(rl)))
//			if rl < 5 {
//				continue
//			}
//
//			for key, val := range lStr {
//				if val == strconv.Itoa(rl) {
//					lStr = append(lStr[:key], lStr[key+1:]...)
//					break
//				}
//			}
//
//			log.Info(" poker = ", reStrP, lStr)
//			pokerS := mSort(reStrP, true, true)
//			log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//
//			eBool := true
//			aCt := 0
//			for _, v := range pokerS {
//				if v >= "10" {
//					aCt++
//				}
//			}
//			log.Info(" poker = ", aCt, i)
//			if (aCt + i) == 5 {
//				if pokerS[0] == "14" {
//					eBool = false
//					reStrC = append(reStrC, "01")
//					reStrC = append(reStrC, pokerS[1:aCt]...)
//				}
//				if pokerS[0] != "14" && i > 0 {
//					eBool = false
//					reStrC = append(reStrC, pokerS[:aCt]...)
//				}
//			} else {
//				ctA := 0
//				for _, v := range pokerS {
//					if v <= "05" {
//						ctA++
//					}
//				}
//				log.Info(" poker = ", ctA, i)
//				if pokerS[0] == "14" {
//					if (ctA + i) == 4 {
//						l := len(pokerS)
//						eBool = false
//						reStrC = append(reStrC, "01")
//						reStrC = append(reStrC, pokerS[l-ctA:l]...)
//					}
//				}
//				if pokerS[0] != "14" {
//					if (ctA + i) == 5 {
//						l := len(p)
//						eBool = false
//						reStrC = append(reStrC, pokerS[l-ctA:l]...)
//					}
//				}
//			}
//
//			log.Info(" eBool = ", eBool, reStrC)
//			if eBool {
//				ll := len(pokerS)
//				if ll >= 5 {
//					for j := 0; j < (ll - 4 + i); j++ {
//						iVal, _ := strconv.Atoi(pokerS[j])
//						iVal4, _ := strconv.Atoi(pokerS[j+4-i])
//						log.Info(" poker = ", iVal, iVal4, i)
//						if (iVal-iVal4) == 4 && i == 0 {
//							reStrC = append(reStrC, pokerS[j:j+5-i]...)
//							break
//						}
//						if (iVal-iVal4+i) == 5 && i != 0 {
//							reStrC = append(reStrC, pokerS[j:j+5-i]...)
//							break
//						}
//						if (iVal-iVal4+i) == 5-i && i != 0 {
//							reStrC = append(reStrC, pokerS[j:j+5-i]...)
//							break
//						}
//					}
//				} else {
//					log.Info(" pokerS = ", pokerS)
//					if ll+i == 5 {
//						iVal, _ := strconv.Atoi(pokerS[0])
//						iVal4, _ := strconv.Atoi(pokerS[ll-1])
//						if iVal-iVal4+i == 4 {
//							reStrC = append(reStrC, pokerS[:ll]...)
//						}
//						if iVal-iVal4 == 4 {
//							reStrC = append(reStrC, pokerS[:ll]...)
//						}
//					}
//					if ll+i == 6 {
//						for j := 0; j < (ll - 2); j++ {
//							iVal, _ := strconv.Atoi(pokerS[j])
//							iVal4, _ := strconv.Atoi(pokerS[j+2])
//							if iVal-iVal4+i == 5 {
//								reStrC = append(reStrC, pokerS[j:j+3]...)
//								break
//							}
//							if iVal-iVal4 == 4 {
//								reStrC = append(reStrC, pokerS[j:j+3]...)
//								break
//							}
//						}
//					}
//				}
//			}
//
//			log.Info(" reStrC = ", reStrC)
//			if len(reStrC) > 0 {
//				// 获取满足条件牌
//				for k, sv := range reStrC {
//					for m := 0; m < len(reStrP); m++ {
//						if reStrP[m][1:] == sv && reStrP[m][:1] == v {
//							reStrC[k] = reStrP[m]
//							reStrP = append(reStrP[:m], reStrP[m+1:]...)
//							break
//						}
//					}
//				}
//				mType = append(mType, j)
//				preArr = append(preArr, reStrC)
//			}
//		}
//	}
//
//	lStr = []string{"5", "5", "6", "8", "10", "13"}
//	mType = []int{}
//	for i := 0; i <= sp.special; i++ {
//		log.Info(" mType = ", i, mType)
//		for j := 0; j < len(p); j++ {
//			pBool := false
//			for _, v := range mType {
//				if v == j {
//					pBool = true
//					break
//				}
//			}
//			if pBool {
//				continue
//			}
//			reStrC := []string{}
//			reStrP := []string{}
//			v := p[j]
//			for _, val := range poker {
//				if val[:1] == v {
//					reStrP = append(reStrP, val)
//				}
//			}
//			reStrS := mSort(reStrP, false, false)
//			log.Info(" poker = ", reStrP, reStrS, i, mType, j)
//			rl := len(reStrS) + i
//
//			log.Info(" Count = ", strconv.Itoa(rl), strings.Count(strings.Join(lStr, ","), strconv.Itoa(rl)))
//			if rl < 5 {
//				continue
//			}
//
//			for key, val := range lStr {
//				if val == strconv.Itoa(rl) {
//					lStr = append(lStr[:key], lStr[key+1:]...)
//					break
//				}
//			}
//
//			log.Info(" poker = ", reStrP, lStr)
//			pokerS := mSort(reStrP, false, false)
//			log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//
//			ll := len(pokerS)
//			if ll >= 5 {
//				for j := 0; j < (ll - 4 + i); j++ {
//					iVal, _ := strconv.Atoi(pokerS[j])
//					iVal4, _ := strconv.Atoi(pokerS[j+4-i])
//					log.Info(" poker = ", iVal, iVal4, i)
//					if (iVal4-iVal) == 4 && i == 0 {
//						reStrC = append(reStrC, pokerS[j:j+5-i]...)
//						break
//					}
//					if (iVal4-iVal+i) == 5 && i != 0 {
//						reStrC = append(reStrC, pokerS[j:j+5-i]...)
//						break
//					}
//					if (iVal4-iVal+i) == 5-i && i != 0 {
//						reStrC = append(reStrC, pokerS[j:j+5-i]...)
//						break
//					}
//				}
//			} else {
//				log.Info(" pokerS = ", pokerS)
//				if ll+i == 5 {
//					iVal, _ := strconv.Atoi(pokerS[0])
//					iVal4, _ := strconv.Atoi(pokerS[ll-1])
//					if iVal4-iVal+i == 4 {
//						reStrC = append(reStrC, pokerS[:ll]...)
//					}
//					if iVal4-iVal == 4 {
//						reStrC = append(reStrC, pokerS[:ll]...)
//					}
//				}
//				if ll+i == 6 {
//					for j := 0; j < (ll - 2); j++ {
//						iVal, _ := strconv.Atoi(pokerS[j])
//						iVal4, _ := strconv.Atoi(pokerS[j+2])
//						if iVal4-iVal+i == 5 {
//							reStrC = append(reStrC, pokerS[j:j+3]...)
//							break
//						}
//						if iVal4-iVal == 4 {
//							reStrC = append(reStrC, pokerS[j:j+3]...)
//							break
//						}
//					}
//				}
//			}
//
//			log.Info(" reStrC = ", reStrC)
//			if len(reStrC) > 0 {
//				// 获取满足条件牌
//				for k, sv := range reStrC {
//					for m := 0; m < len(reStrP); m++ {
//						if reStrP[m][1:] == sv && reStrP[m][:1] == v {
//							reStrC[k] = reStrP[m]
//							reStrP = append(reStrP[:m], reStrP[m+1:]...)
//							break
//						}
//					}
//				}
//
//				mType = append(mType, j)
//				preArr = append(preArr, reStrC)
//			}
//		}
//	}
//
//	log.Info(" poker111 = ", preArr, fArr, flush, sp)
//	if len(preArr) > 0 {
//		for _, v := range preArr {
//			pokerC := append([]string{}, poker...)
//			for _, lv := range v {
//				for sk, sv := range pokerC {
//					if sv == lv {
//						pokerC = append(pokerC[:sk], pokerC[sk+1:]...)
//						break
//					}
//				}
//			}
//			fArr = append(fArr, pokerC)
//		}
//	}
//
//	preArr = append(preArr, []string{})
//	fArr = append(fArr, poker)
//	log.Info(" poker111 = ", preArr, fArr, flush, sp)
//
//	//jNum := 0
//	reStr := []string{}
//	reStrC := []string{}
//	spNum := 0
//	for k, v := range fArr {
//		pokerA := append([]string{}, v...)
//		pokerB := append([]string{}, v...)
//		pokerC := append([]string{}, v...)
//		pokerD := append([]string{}, v...)
//		jNum := 0
//		reStr = []string{}
//
//		if len(preArr[k]) > 0 {
//			spNum = 5 - len(preArr[k])
//		} else {
//			spNum = 0
//		}
//
//		log.Info(" pokerA = ", pokerA)
//		ll := len(preArr[k])
//		if ll > 0 && ll != 5 {
//			jNum = 5 - len(preArr[k])
//		}
//
//		sp.special = spCt
//		sp.sPoker = spPoker
//		for i := 0; i <= (sp.special - jNum); i++ {
//			pokerS := mSort(pokerC, false, true)
//			l := len(pokerS)
//			eBool := true
//			for eBool {
//				log.Info(" poker111 = ", eBool, pokerS, l, i)
//
//				slStr := []string{}
//				if l >= 5 {
//					bBool := true
//					str := strings.Join(pokerS, ",")
//					if strings.Count(str, "01") == 1 {
//						ct := 0
//						for _, v := range pokerS {
//							if v >= "10" {
//								ct++
//							}
//						}
//						log.Info(" poker = ", ct, i)
//						if (ct + i) == 4 {
//							bBool = false
//							slStr = append(slStr, "01")
//							slStr = append(slStr, pokerS[:ct]...)
//						}
//					}
//					if bBool {
//						//for j := 0; j < (l - 4+i); j++ {
//						iVal, _ := strconv.Atoi(pokerS[0])
//						iVal4, _ := strconv.Atoi(pokerS[4-i])
//						log.Info(" poker = ", iVal, iVal4, i)
//						if (iVal-iVal4) == 4 && i == 0 {
//							slStr = append(slStr, pokerS[:5-i]...)
//							//break
//						}
//						if (iVal-iVal4+i) == 5 && i != 0 {
//							slStr = append(slStr, pokerS[:5-i]...)
//							//break
//						}
//						if (iVal-iVal4+i) == 5-i && i != 0 {
//							slStr = append(slStr, pokerS[:5-i]...)
//							//break
//						}
//						//}
//					}
//				} else {
//					log.Info(" pokerS = ", pokerS)
//					iVal, _ := strconv.Atoi(pokerS[0])
//					iVal4 := 0
//					if l > 1 {
//						iVal4, _ = strconv.Atoi(pokerS[l-1])
//					} else {
//						iVal4 = iVal - 2
//					}
//					log.Info(" poker111 = ", iVal, iVal4, l, i)
//
//					if l+i == 5 {
//						if iVal-iVal4+i == 4 {
//							slStr = append(slStr, pokerS[:l]...)
//						}
//						if iVal-iVal4 == 4 && len(pokerS)+i == 5 {
//							slStr = append(slStr, pokerS[:l]...)
//						}
//					}
//					if l+i == 3 {
//						if iVal-iVal4 == 2 {
//							slStr = append(slStr, pokerS[:l]...)
//						}
//						if iVal-iVal4+i == 2 && i != 0 {
//							slStr = append(slStr, pokerS[:l]...)
//						}
//					}
//				}
//
//				log.Info(" slStr = ", slStr)
//				if len(slStr) > 0 {
//					log.Info(" poker222 = ", pokerS, pokerC, slStr)
//					for _, lv := range slStr {
//						for sk, sv := range pokerC {
//							if sv[1:] == lv {
//								reStr = append(reStr, sv)
//								pokerC = append(pokerC[:sk], pokerC[sk+1:]...)
//								break
//							}
//						}
//					}
//					log.Info(" poker333 = ", reStr, pokerS, pokerC)
//
//					if i != 0 {
//						reStr = append(reStr, sp.sPoker[:i]...)
//						sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//					}
//
//					jNum += i
//					i -= i
//
//					if len(pokerC) > 0 {
//						pokerS = mSort(pokerC, false, true)
//						log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//						l = len(pokerS)
//					} else {
//						eBool = false
//						log.Info(" poker = ", eBool, pokerC, i)
//					}
//				} else {
//					eBool = false
//				}
//			}
//		}
//
//		log.Info(" poker111 = ", reStr, spNum)
//
//		if len(preArr[k])+len(reStr)+spNum < 13 {
//			sp.special = spCt
//			sp.sPoker = spPoker
//
//			if ll > 0 && ll != 5 {
//				jNum = 5 - len(preArr[k])
//			} else {
//				jNum = 0
//			}
//
//			reStr = []string{}
//			for i := 0; i <= (sp.special - jNum); i++ {
//				pokerS := mSort(pokerB, false, true)
//				l := len(pokerS)
//				eBool := true
//				for eBool {
//					log.Info(" poker111 = ", eBool, pokerS, l, i)
//
//					slStr := []string{}
//					if l >= 5 {
//						bBool := true
//						str := strings.Join(pokerS, ",")
//						if strings.Count(str, "01") == 1 {
//							ct := 0
//							for _, v := range pokerS {
//								if v <= "05" {
//									ct++
//								}
//							}
//							log.Info(" poker = ", ct, i)
//							if (ct + i) == 5 {
//								bBool = false
//								slStr = append(slStr, pokerS[l-ct:l]...)
//							}
//						}
//						if bBool {
//							//for j := 0; j < (l - 4+i); j++ {
//							iVal, _ := strconv.Atoi(pokerS[0])
//							iVal4, _ := strconv.Atoi(pokerS[4-i])
//							log.Info(" poker = ", iVal, iVal4, i)
//							if (iVal-iVal4) == 4 && i == 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							if (iVal-iVal4+i) == 5 && i != 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							if (iVal-iVal4+i) == 5-i && i != 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							//}
//						}
//					} else {
//						log.Info(" pokerS = ", pokerS)
//						iVal, _ := strconv.Atoi(pokerS[0])
//						iVal4 := 0
//						if l > 1 {
//							iVal4, _ = strconv.Atoi(pokerS[l-1])
//						} else {
//							iVal4 = iVal - 2
//						}
//						log.Info(" poker111 = ", iVal, iVal4, l, i)
//
//						if l+i == 5 {
//							if iVal-iVal4+i == 4 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//							if iVal-iVal4 == 4 && len(pokerS)+i == 5 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//						}
//						if l+i == 3 {
//							if iVal-iVal4 == 2 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//							if iVal-iVal4+i == 2 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//						}
//					}
//
//					log.Info(" slStr = ", slStr)
//					if len(slStr) > 0 {
//						log.Info(" poker222 = ", pokerS, pokerB, slStr)
//						for _, lv := range slStr {
//							for sk, sv := range pokerB {
//								if sv[1:] == lv {
//									reStr = append(reStr, sv)
//									pokerB = append(pokerB[:sk], pokerB[sk+1:]...)
//									break
//								}
//							}
//						}
//						log.Info(" poker333 = ", reStr, pokerS, pokerB)
//
//						if i != 0 {
//							reStr = append(reStr, sp.sPoker[:i]...)
//							sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//						}
//
//						jNum += i
//						i -= i
//
//						if len(pokerB) > 0 {
//							pokerS = mSort(pokerB, false, true)
//							log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//							l = len(pokerS)
//						} else {
//							eBool = false
//							log.Info(" poker = ", eBool, pokerB, i)
//						}
//					} else {
//						eBool = false
//					}
//				}
//			}
//		}
//
//		log.Info(" poker111 = ", preArr[k], reStr)
//
//		if len(preArr[k])+len(reStr)+spNum < 13 {
//			sp.special = spCt
//			sp.sPoker = spPoker
//
//			if ll > 0 && ll != 5 {
//				jNum = 5 - len(preArr[k])
//			} else {
//				jNum = 0
//			}
//
//			reStr = []string{}
//			for i := 0; i <= (sp.special - jNum); i++ {
//				log.Info(" pokerA = ", pokerA, i, sp)
//				pokerS := mSort(pokerA, false, false)
//				l := len(pokerS)
//				eBool := true
//				for eBool {
//					log.Info(" poker111 = ", eBool, pokerS, l, i)
//
//					slStr := []string{}
//					if l >= 5 {
//						bBool := true
//						str := strings.Join(pokerS, ",")
//						if strings.Count(str, "01") == 1 {
//							ct := 0
//							for _, v := range pokerS {
//								if v >= "10" {
//									ct++
//								}
//							}
//							log.Info(" poker = ", ct, i)
//							if (ct + i) == 4 {
//								bBool = false
//								slStr = append(slStr, "01")
//								slStr = append(slStr, pokerS[l-ct:l]...)
//							}
//						}
//						if bBool {
//							//for j := 0; j < (l - 4+i); j++ {
//							iVal, _ := strconv.Atoi(pokerS[0])
//							iVal4, _ := strconv.Atoi(pokerS[4-i])
//							log.Info(" poker = ", iVal, iVal4, i)
//							if (iVal4-iVal) == 4 && i == 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							if (iVal4-iVal+i) == 5 && i != 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							if (iVal4-iVal+i) == 5-i && i != 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							//}
//						}
//					} else {
//						log.Info(" pokerS = ", pokerS)
//						iVal, _ := strconv.Atoi(pokerS[0])
//						iVal4 := 0
//						if l > 1 {
//							iVal4, _ = strconv.Atoi(pokerS[l-1])
//						} else {
//							iVal4 = iVal + 2
//						}
//						log.Info(" poker111 = ", iVal, iVal4, l, i)
//
//						if l+i == 5 {
//							if iVal4-iVal+i == 4 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//							if iVal4-iVal == 4 && len(pokerS)+i == 5 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//						}
//						if l+i == 3 {
//							if iVal4-iVal == 2 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//							if iVal4-iVal+i == 2 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//						}
//					}
//
//					log.Info(" slStr = ", slStr)
//					if len(slStr) > 0 {
//						log.Info(" poker222 = ", pokerS, pokerA, slStr)
//						for _, lv := range slStr {
//							for sk, sv := range pokerA {
//								if sv[1:] == lv {
//									reStr = append(reStr, sv)
//									pokerA = append(pokerA[:sk], pokerA[sk+1:]...)
//									break
//								}
//							}
//						}
//						log.Info(" poker333 = ", reStr, pokerS, pokerA)
//
//						if i != 0 {
//							reStr = append(reStr, sp.sPoker[:i]...)
//							sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//						}
//
//						jNum += i
//						i -= i
//
//						if len(pokerA) > 0 {
//							pokerS = mSort(pokerA, false, false)
//							log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//							l = len(pokerS)
//						} else {
//							eBool = false
//							log.Info(" poker = ", eBool, pokerA, i)
//						}
//					} else {
//						eBool = false
//					}
//				}
//			}
//		}
//
//		log.Info(" poker111 = ", preArr[k], reStr)
//
//		if len(preArr[k])+len(reStr)+spNum < 13 {
//			sp.special = spCt
//			sp.sPoker = spPoker
//
//			if ll > 0 && ll != 5 {
//				jNum = 5 - len(preArr[k])
//			} else {
//				jNum = 0
//			}
//
//			reStr = []string{}
//			for i := 0; i <= (sp.special - jNum); i++ {
//				log.Info(" pokerD = ", pokerD, i, sp)
//				pokerS := mSort(pokerD, false, false)
//				l := len(pokerS)
//				eBool := true
//				for eBool {
//					log.Info(" poker111 = ", eBool, pokerS, l, i)
//
//					slStr := []string{}
//					if l >= 5 {
//						bBool := true
//						str := strings.Join(pokerS, ",")
//						if strings.Count(str, "01") == 1 {
//							ct := 0
//							for _, v := range pokerS {
//								if v <= "05" {
//									ct++
//								}
//							}
//							log.Info(" poker = ", ct, i)
//							if (ct + i) == 5 {
//								bBool = false
//								slStr = append(slStr, pokerS[:ct]...)
//							}
//						}
//						if bBool {
//							iVal, _ := strconv.Atoi(pokerS[0])
//							iVal4, _ := strconv.Atoi(pokerS[4-i])
//							log.Info(" poker = ", iVal, iVal4, i)
//							if (iVal4-iVal) == 4 && i == 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							if (iVal4-iVal+i) == 5 && i != 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//							if (iVal4-iVal+i) == 5-i && i != 0 {
//								slStr = append(slStr, pokerS[:5-i]...)
//								//break
//							}
//						}
//					} else {
//						log.Info(" pokerS = ", pokerS)
//						iVal, _ := strconv.Atoi(pokerS[0])
//						iVal4 := 0
//						if l > 1 {
//							iVal4, _ = strconv.Atoi(pokerS[l-1])
//						} else {
//							iVal4 = iVal + 2
//						}
//						log.Info(" poker111 = ", iVal, iVal4, l, i)
//
//						if l+i == 5 {
//							if iVal4-iVal+i == 4 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//							if iVal4-iVal == 4 && len(pokerS)+i == 5 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//						}
//						if l+i == 3 {
//							if iVal4-iVal == 2 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//							if iVal4-iVal+i == 2 {
//								slStr = append(slStr, pokerS[:l]...)
//							}
//						}
//					}
//
//					log.Info(" slStr = ", slStr)
//					if len(slStr) > 0 {
//						log.Info(" poker222 = ", pokerS, pokerD, slStr)
//						for _, lv := range slStr {
//							for sk, sv := range pokerD {
//								if sv[1:] == lv {
//									reStr = append(reStr, sv)
//									pokerD = append(pokerD[:sk], pokerD[sk+1:]...)
//									break
//								}
//							}
//						}
//						log.Info(" poker333 = ", reStr, pokerS, pokerD)
//
//						if i != 0 {
//							reStr = append(reStr, sp.sPoker[:i]...)
//							sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//						}
//
//						jNum += i
//						i -= i
//
//						if len(pokerD) > 0 {
//							pokerS = mSort(pokerD, false, false)
//							log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//							l = len(pokerS)
//						} else {
//							eBool = false
//							log.Info(" poker = ", eBool, pokerD, i)
//						}
//					} else {
//						eBool = false
//					}
//				}
//			}
//		}
//
//		log.Info(" poker111 = ", preArr[k], reStr)
//
//		if len(preArr[k])+len(reStr)+spNum == 13 {
//			if len(preArr[k]) > 0 {
//				flush = true
//			}
//			log.Info(" poker111 = ", preArr[k], reStr)
//			reStrC = preArr[k]
//			break
//		}
//	}
//
//	log.Info(" pokerInfo = ", reStr, poker, spPoker, sp)
//	if len(reStr)+len(reStrC)+spNum == 13 {
//		return true, flush
//	}
//
//	sp.special = spCt
//	sp.sPoker = spPoker
//	return false, flush
//}
//
//// 六对半牌型判断
//func mSixDouble(sp *specialPoker, poker []string) (bool, bool) {
//	mType := false
//	one := 0
//	single := 0
//	double := 0
//	p := mSort(poker, false, false)
//	log.Info(" poker = ", p)
//
//	reStr := []string{}
//	for _, val := range poker {
//		reStr = append(reStr, val[1:])
//	}
//	str := strings.Join(reStr, ",")
//	log.Info(" poker = ", reStr)
//
//	for _, v := range p {
//		ct := strings.Count(str, v)
//		log.Info(" ct = ", ct)
//		if ct >= 4 {
//			mType = true
//		}
//
//		if ct%2 == 1 {
//			if ct >= 3 {
//				one++
//			} else {
//				single++
//			}
//		}
//
//		if ct%2 == 0 {
//			double++
//		}
//	}
//
//	log.Info(" ct = ", one, single)
//	if sp.special == 2 && (one+single == 3 || one+single == 1) {
//		if single < 3 {
//			mType = true
//		}
//		return true, mType
//	}
//
//	if sp.special == 1 && (one+single == 2 || one+single == 0) {
//		if one == 1 {
//			mType = true
//		}
//		return true, mType
//	}
//
//	if sp.special == 0 && one+single == 1 {
//		return true, mType
//	}
//
//	return false, false
//}
//
//// 五同牌型判断
//func mFiveSame(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	p := []string{}
//	for _, v := range poker {
//		p = append(p, v[1:])
//	}
//
//	log.Info(" p = ", p)
//	str := strings.Join(p, ",")
//	pa := mSort(poker, false, false)
//	log.Info(" poker = ", str, pa)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, v := range pa {
//			ct := strings.Count(str, v)
//			log.Info(" ct = ", ct, i)
//			if (ct + i) >= 5 {
//				for j := 0; j < len(poker); j++ {
//					if poker[j][1:] == v {
//						if len(reStr) == 5 {
//							break
//						}
//						reStr = append(reStr, poker[j])
//						poker = append(poker[:j], poker[j+1:]...)
//						j--
//					}
//				}
//				sp.special -= i
//				reStr = append(reStr, sp.sPoker[:i]...)
//				sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//				eBool = true
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
//
//// 同花顺牌型判断
//func mFlushStraight(sp *specialPoker, poker []string) ([]string, []string, int) {
//	reStr := []string{}
//	p := []string{}
//	tp := 0
//	for _, v := range poker {
//		str := strings.Join(p, ",")
//		if strings.Count(str, v[:1]) == 0 {
//			p = append(p, v[:1])
//		}
//	}
//	sort.Strings(p)
//	log.Info(" poker = ", p)
//
//	// 鬼牌模式
//	if len(p) <= 3 {
//		log.Info(" poker = ", len(p))
//		lStr := []string{"05", "05", "06", "07", "08", "09", "10", "13"}
//		for i := 0; i <= sp.special; i++ {
//			sBool := false
//			for _, v := range p {
//				reStrP := []string{}
//				for _, val := range poker {
//					if val[:1] == v {
//						reStrP = append(reStrP, val)
//					}
//				}
//				reStrS := mSort(reStrP, false, false)
//				log.Info(" poker = ", reStrP, reStrS, i)
//				rl := len(reStrS) + i
//				sts := strconv.Itoa(rl)
//				if rl < 10 {
//					sts = "0" + strconv.Itoa(rl)
//					log.Info(" sts = ", sts)
//				}
//
//				log.Info(" Count = ", lStr, strconv.Itoa(rl), strings.Count(strings.Join(lStr, ","), sts), sts)
//				if strings.Count(strings.Join(lStr, ","), sts) == 0 {
//					continue
//				}
//
//				for key, val := range lStr {
//					if val == sts {
//						lStr = append(lStr[:key], lStr[key+1:]...)
//						break
//					}
//				}
//
//				log.Info(" poker = ", reStrP, lStr)
//				pokerS := mSort(reStrP, true, true)
//				log.Info(" poker = ", pokerS, len(pokerS)+i, i)
//				l := len(pokerS)
//
//				eBool := true
//				aCt := 0
//				for _, v := range pokerS {
//					if v >= "10" {
//						aCt++
//					}
//				}
//				log.Info(" poker = ", aCt, i)
//				if (aCt + i) == 5 {
//					tp = 3
//					if pokerS[0] == "14" {
//						eBool = false
//						reStr = append(reStr, "01")
//						reStr = append(reStr, pokerS[1:aCt]...)
//					}
//					if pokerS[0] != "14" && i > 0 {
//						eBool = false
//						reStr = append(reStr, pokerS[:aCt]...)
//					}
//				} else {
//					ctA := 0
//					for _, v := range pokerS {
//						if v <= "05" {
//							ctA++
//						}
//					}
//					log.Info(" poker = ", ctA, i)
//					if pokerS[0] == "14" {
//						if (ctA + i) == 4 {
//							tp = 2
//							eBool = false
//							reStr = append(reStr, "01")
//							reStr = append(reStr, pokerS[l-ctA:l]...)
//						}
//					}
//					if pokerS[0] != "14" {
//						if (ctA + i) == 5 {
//							tp = 2
//							eBool = false
//							reStr = append(reStr, pokerS[l-ctA:l]...)
//						}
//					}
//				}
//
//				log.Info(" eBool = ", eBool)
//				if eBool {
//					ll := len(pokerS)
//					if ll >= 5 {
//						for j := 0; j < (ll - 4 + i); j++ {
//							iVal, _ := strconv.Atoi(pokerS[j])
//							iVal4, _ := strconv.Atoi(pokerS[j+4-i])
//							log.Info(" poker = ", iVal, iVal4, i)
//							if (iVal-iVal4) == 4 && i == 0 {
//								tp = 1
//								reStr = append(reStr, pokerS[j:j+5-i]...)
//								break
//							}
//							if (iVal-iVal4+i) == 5 && i != 0 {
//								tp = 1
//								reStr = append(reStr, pokerS[j:j+5-i]...)
//								break
//							}
//							if (iVal-iVal4+i) == 5-i && i != 0 {
//								tp = 1
//								reStr = append(reStr, pokerS[j:j+5-i]...)
//								break
//							}
//						}
//					} else {
//						log.Info(" pokerS = ", pokerS)
//						if ll+i == 5 {
//							iVal, _ := strconv.Atoi(pokerS[0])
//							iVal4, _ := strconv.Atoi(pokerS[ll-1])
//							if iVal-iVal4+i == 4 {
//								tp = 1
//								reStr = append(reStr, pokerS[:ll]...)
//							}
//							if iVal-iVal4 == 4 {
//								tp = 1
//								reStr = append(reStr, pokerS[:ll]...)
//							}
//						}
//					}
//				}
//
//				if len(reStr) > 0 {
//					// 获取满足条件牌
//					for k, v := range reStr {
//						for m := 0; m < len(reStrP); m++ {
//							if reStrP[m][1:] == v {
//								reStr[k] = reStrP[m]
//								reStrP = append(reStrP[:m], reStrP[m+1:]...)
//								break
//							}
//						}
//					}
//
//					for _, lv := range reStr {
//						for sk, sv := range poker {
//							if sv == lv {
//								poker = append(poker[:sk], poker[sk+1:]...)
//								break
//							}
//						}
//					}
//
//					if i != 0 {
//						reStr = append(reStr, sp.sPoker[:i]...)
//						sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//						sp.special -= i
//					}
//					sBool = true
//					break
//				}
//			}
//
//			if sBool {
//				break
//			}
//		}
//	}
//
//	log.Info(" ppp = ", reStr, poker, tp)
//	return reStr, poker, tp
//}
//
//// 顺子牌型判断
//func mStraight(sp *specialPoker, poker []string) ([]string, []string, int) {
//	reStr := []string{}
//	tp := 0
//	p := mSort(poker, true, true)
//	sort.Strings(poker)
//	log.Info(" poker = ", poker)
//	log.Info(" poker = ", p)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := true
//		aCt := 0
//		for _, v := range p {
//			if v >= "10" {
//				aCt++
//			}
//		}
//		log.Info(" poker = ", aCt, i)
//		if (aCt + i) == 5 {
//			tp = 3
//			if p[0] == "14" {
//				eBool = false
//				reStr = append(reStr, "01")
//				reStr = append(reStr, p[1:aCt]...)
//			}
//			if p[0] != "14" && i > 0 {
//				eBool = false
//				reStr = append(reStr, p[:aCt]...)
//			}
//		} else {
//			ctA := 0
//			for _, v := range p {
//				if v <= "05" {
//					ctA++
//				}
//			}
//			log.Info(" poker = ", ctA, i)
//			if p[0] == "14" {
//				if (ctA + i) == 4 {
//					tp = 2
//					l := len(p)
//					eBool = false
//					reStr = append(reStr, "01")
//					reStr = append(reStr, p[l-ctA:l]...)
//				}
//			}
//			if p[0] != "14" {
//				if (ctA + i) == 5 {
//					tp = 2
//					l := len(p)
//					eBool = false
//					reStr = append(reStr, p[l-ctA:l]...)
//				}
//			}
//		}
//
//		if eBool {
//			ll := len(p)
//			if ll >= 5 {
//				for j := 0; j < (ll - 4 + i); j++ {
//					iVal, _ := strconv.Atoi(p[j])
//					iVal4, _ := strconv.Atoi(p[j+4-i])
//					log.Info(" poker = ", iVal, iVal4, i)
//					if (iVal-iVal4) == 4 && i == 0 {
//						tp = 1
//						reStr = append(reStr, p[j:j+5-i]...)
//						break
//					}
//					if (iVal-iVal4+i) == 5 && i != 0 {
//						tp = 1
//						reStr = append(reStr, p[j:j+5-i]...)
//						break
//					}
//					if (iVal-iVal4+i) == 5-i && i != 0 {
//						tp = 1
//						reStr = append(reStr, p[j:j+5-i]...)
//						break
//					}
//				}
//			} else {
//				log.Info(" p = ", p)
//				if ll+i == 5 {
//					iVal, _ := strconv.Atoi(p[0])
//					iVal4, _ := strconv.Atoi(p[ll-1])
//					if iVal-iVal4+i == 4 {
//						tp = 1
//						reStr = append(reStr, p[:ll]...)
//					}
//					if iVal-iVal4 == 4 {
//						tp = 1
//						reStr = append(reStr, p[:ll]...)
//					}
//				}
//			}
//		}
//
//		if len(reStr) != 0 {
//			log.Info(" poker = ", reStr)
//			// 获取满足条件牌
//			for k, v := range reStr {
//				for m := 0; m < len(poker); m++ {
//					if poker[m][1:] == v {
//						reStr[k] = poker[m]
//						poker = append(poker[:m], poker[m+1:]...)
//						break
//					}
//				}
//			}
//			if i != 0 {
//				reStr = append(reStr, sp.sPoker[:i]...)
//				sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//				sp.special -= i
//			}
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker, tp)
//	return reStr, poker, tp
//}
//
//// 铁支牌型判断
//func mFour(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	p := []string{}
//	for _, v := range poker {
//		p = append(p, v[1:])
//	}
//	log.Info(" poker = ", p)
//	str := strings.Join(p, ",")
//	log.Info(" poker = ", str)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, v := range p {
//			ct := strings.Count(str, v)
//			log.Info(" ct = ", ct)
//			if (ct + i) == 4 {
//				for j := 0; j < len(poker); j++ {
//					if poker[j][1:] == v {
//						reStr = append(reStr, poker[j])
//						poker = append(poker[:j], poker[j+1:]...)
//						j--
//					}
//				}
//				reStr = append(reStr, poker[0])
//				poker = append([]string{}, poker[1:]...)
//				reStr = append(reStr, sp.sPoker[:i]...)
//				sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//				sp.special -= i
//				eBool = true
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
//
//// 葫芦牌型判断
//func mGourd(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	var p []string
//	for _, v := range poker {
//		p = append(p, v[1:])
//	}
//	sort.Sort(sort.Reverse(sort.StringSlice(p)))
//	log.Info(" poker = ", p)
//	str := strings.Join(p, ",")
//	log.Info(" poker = ", str)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, v := range p {
//			ct := strings.Count(str, v)
//			log.Info(" ct = ", ct, v)
//			if (ct + i) == 3 {
//				for j := 0; j <= (sp.special - i); j++ {
//					for _, val := range p {
//						if val != v {
//							vct := strings.Count(str, val)
//							log.Info(" vct = ", vct, val)
//							if (vct + j) == 2 {
//								for k := 0; k < len(poker); k++ {
//									if poker[k][1:] == v || poker[k][1:] == val {
//										reStr = append(reStr, poker[k])
//										poker = append(poker[:k], poker[k+1:]...)
//										k--
//									}
//								}
//								sp.special -= i + j
//								reStr = append(reStr, sp.sPoker[:i+j]...)
//								sp.sPoker = append([]string{}, sp.sPoker[i+j:]...)
//								eBool = true
//								break
//							}
//						}
//					}
//
//					if eBool {
//						break
//					}
//				}
//			}
//
//			if eBool {
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
//
//// 同花牌型判断
//func mFlush(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	var p []string
//	for _, v := range poker {
//		p = append(p, v[:1])
//	}
//	sort.Sort(sort.Reverse(sort.StringSlice(poker)))
//	log.Info(" poker = ", p)
//	str := strings.Join(p, ",")
//	log.Info(" poker = ", str)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, val := range p {
//			ct := strings.Count(str, val)
//			log.Info(" ct = ", ct)
//			if (ct + i) >= 5 {
//				for j := 0; j < len(poker); j++ {
//					if poker[j][:1] == val {
//						if len(reStr) == 5 {
//							break
//						}
//						reStr = append(reStr, poker[j])
//						poker = append(poker[:j], poker[j+1:]...)
//						j--
//					}
//				}
//				reStr = append(reStr, sp.sPoker[:i]...)
//				sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//				sp.special -= i
//				eBool = true
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
//
//// 三张牌型判断
//func mThree(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	var p []string
//	for _, v := range poker {
//		p = append(p, v[1:])
//	}
//	sort.Strings(poker)
//	sort.Sort(sort.Reverse(sort.StringSlice(p)))
//	log.Info(" poker = ", p)
//	str := strings.Join(p, ",")
//	log.Info(" poker = ", str)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, v := range p {
//			ct := strings.Count(str, v)
//			log.Info(" ct = ", ct)
//			if (ct + i) == 3 {
//				for j := 0; j < len(poker); j++ {
//					if poker[j][1:] == v {
//						reStr = append(reStr, poker[j])
//						poker = append(poker[:j], poker[j+1:]...)
//						j--
//					}
//				}
//				reStr = append(reStr, poker[:2]...)
//				poker = append([]string{}, poker[2:]...)
//				reStr = append(reStr, sp.sPoker[:i]...)
//				sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//				sp.special -= i
//				eBool = true
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
//
//// 两对牌型判断
//func mTwice(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	var p []string
//	for _, v := range poker {
//		p = append(p, v[1:])
//	}
//	sort.Sort(sort.Reverse(sort.StringSlice(p)))
//	log.Info(" poker = ", p)
//	str := strings.Join(p, ",")
//	log.Info(" poker = ", str)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, v := range p {
//			ct := strings.Count(str, v)
//			log.Info(" ct = ", ct)
//			if (ct + i) == 2 {
//				log.Info(" v = ", v)
//				for j := 0; j <= (sp.special - i); j++ {
//					for _, val := range p {
//						if val != v {
//							vct := strings.Count(str, val)
//							log.Info(" vct = ", vct)
//							if (vct + j) == 2 {
//								for k := 0; k < len(poker); k++ {
//									if poker[k][1:] == v {
//										reStr = append(reStr, poker[k])
//										poker = append(poker[:k], poker[k+1:]...)
//										k--
//									}
//								}
//								for k := 0; k < len(poker); k++ {
//									if poker[k][1:] == val {
//										reStr = append(reStr, poker[k])
//										poker = append(poker[:k], poker[k+1:]...)
//										k--
//									}
//								}
//								reStr = append(reStr, poker[0])
//								poker = append([]string{}, poker[1:]...)
//								log.Info(" poker = ", reStr, poker, i, j)
//								reStr = append(reStr, sp.sPoker[:i+j]...)
//								sp.sPoker = append([]string{}, sp.sPoker[i+j:]...)
//								sp.special -= i + j
//								eBool = true
//								break
//							}
//						}
//					}
//
//					if eBool {
//						break
//					}
//				}
//			}
//
//			if eBool {
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
//
//// 对子牌型判断
//func mTwo(sp *specialPoker, poker []string) ([]string, []string) {
//	reStr := []string{}
//	var p []string
//	for _, v := range poker {
//		p = append(p, v[1:])
//	}
//	sort.Strings(poker)
//	sort.Sort(sort.Reverse(sort.StringSlice(p)))
//	log.Info(" poker = ", p)
//	str := strings.Join(p, ",")
//	log.Info(" poker = ", str)
//
//	for i := 0; i <= sp.special; i++ {
//		eBool := false
//		for _, v := range p {
//			ct := strings.Count(str, v)
//			log.Info(" ct = ", ct)
//			if (ct + i) == 2 {
//				for j := 0; j < len(poker); j++ {
//					if poker[j][1:] == v {
//						reStr = append(reStr, poker[j])
//						poker = append(poker[:j], poker[j+1:]...)
//						j--
//					}
//				}
//
//				if len(poker) > 3 {
//					reStr = append(reStr, poker[:3]...)
//					poker = append([]string{}, poker[3:]...)
//				} else {
//					reStr = append(reStr, poker...)
//					poker = []string{}
//				}
//
//				reStr = append(reStr, sp.sPoker[:i]...)
//				sp.sPoker = append([]string{}, sp.sPoker[i:]...)
//				sp.special -= i
//				eBool = true
//				break
//			}
//		}
//
//		if eBool {
//			break
//		}
//	}
//
//	log.Info(" poker = ", reStr, poker)
//	return reStr, poker
//}
